#ifndef __CAR_H__
#define __CAR_H__

#ifdef __cplusplus
extern "C" {
#endif
#include "stdint.h"
#include "FreeRTOS.h"
#include "semphr.h"

#define PI 3.14159265

/* 带参宏，可以像内联函数一样使用 */
#define AIN2(a)	if (a)	\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);\
					else		\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET)

#define AIN1(a)	if (a)	\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);\
					else		\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET)
					
#define BIN1(a)	if (a)	\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);\
					else		\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET)
					
#define BIN2(a)	if (a)	\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);\
					else		\
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET)
					
extern uint8_t Flag_Qian,Flag_Hou,Flag_Left,Flag_Right;
extern SemaphoreHandle_t SemMpuIntr;
extern float Car_Angle_Balance;
extern float Velocity_Kp;			// 速度环PID 的P值
extern float Velocity_Ki; 	// 速度环PID 的I值 = P/200;
extern int PWMA, PWMB;

void Car_Read_Angle(float *gyro_balance, float *gyro_turn, float *vertical_angle);
int myabs(int a);
void Set_Pwm(int motoA,int motoB);
int Car_Balance(float Angle,float Gyro);
int Car_Velocity(int encoder_left,int encoder_right);
int Car_Turn(int encoder_a,int encoder_b,float gyro);
int Read_Encoder(uint8_t TIMX);

void car_task(void *pvParameters);

#ifdef __cplusplus
}
#endif

#endif /* __CAR_H__ */

